#pragma GCC optimize(2, "Ofast", "inline")
#include <iostream>
#include <vector>
#include <map>
#include <cmath>
#include <set>
#include <queue>
#include <stack>
#include <list>
#include <unordered_map>
#include <algorithm>
#define endl '\n'
#define int long long
#define pii pair<int, int>
using namespace std;

// 已知
int h, w;
int g[21][21];

// 未知
int mx = 0;
int vis[21][21];

void input()
{
    cin >> h >> w;
    for (int i = 0;i < h;++i)
    {
        for (int j = 0;j < w;++j)
        {
            cin >> g[i][j];
        }
    }
}

void dfs(int i, int j, int cnt)
{
    if (i == h)  // 搜索完所有行了
    {
        mx = max(mx, cnt);
        return;
    }
    if (j == w)
    {
        dfs(i + 1, 0, cnt); // 搜索下一行
        return;
    }
    if (vis[i][j])  // 该格子已被覆盖
    {
        dfs(i, j + 1, cnt);
        return;
    }
    dfs(i, j + 1, cnt ^ g[i][j]);  // 不覆盖，直接异或
    if (j + 1 < w and not vis[i][j + 1])  // 尝试水平方向多米诺
    {
        vis[i][j] = vis[i][j + 1] = 1; // 横着覆盖
        dfs(i, j + 2, cnt); // 向右走两个格子
        vis[i][j] = vis[i][j + 1] = 0;
    }
    if (i + 1 < h and not vis[i + 1][j])  // 尝试垂直方向多米诺
    {
        vis[i][j] = vis[i + 1][j] = 1; // 竖着覆盖
        dfs(i, j + 1, cnt); // 向右走一个格子
        vis[i][j] = vis[i + 1][j] = 0;
    }

}


signed main()
{
    cin.tie(0)->sync_with_stdio(0);
    input();
    dfs(0, 0, 0);
    cout << mx;
    return 0;
}